package org.springblade.mes.system.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springblade.core.tenant.mp.TenantEntity;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 生产物料表
 * @author 翁金川
 * @since 2025-06-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("md_material")
@ApiModel(value = "Material对象", description = "生产物料表")
public class Material extends TenantEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 物料编码
     */
    @ApiModelProperty(value = "物料编码")
    private String materialNo;

    /**
     * 内部图号(材料牌号)
     */
    @ApiModelProperty(value = "内部图号(材料牌号)")
    private String innerDrawingNo;

    /**
     * 物料名称
     */
    @ApiModelProperty(value = "物料名称")
    private String materialName;

    /**
     * 物料简称(备件描述-英)
     */
    @ApiModelProperty(value = "物料简称(备件描述-英)")
    private String materialShort;

    /**
     * 物料标识
     */
    @ApiModelProperty(value = "物料标识")
    private String materialFlag;

    /**
     * 物料类型
     */
    @ApiModelProperty(value = "物料类型")
    private String materialType;

    /**
     * 物料组编码
     */
    @ApiModelProperty(value = "物料组编码")
    private String materialGroupNo;

    /**
     * 物料内部编码innerCode
     */
    @ApiModelProperty(value = "物料内部编码innerCode")
    private String innerCode;

    /**
     * 规格
     */
    @ApiModelProperty(value = "规格")
    private String specifications;

    /**
     * 型号
     */
    @ApiModelProperty(value = "型号")
    private String model;

    /**
     * 计量单位编码
     */
    @ApiModelProperty(value = "计量单位编码")
    private String unit;

    /**
     * 交付规格
     */
    @ApiModelProperty(value = "交付规格")
    private String deliverSpec;

    /**
     * 物料颜色
     */
    @ApiModelProperty(value = "物料颜色")
    private String materialColor;

    /**
     * 追溯精度:1:批量,2:单件
     */
    @ApiModelProperty(value = "追溯精度:1:批量,2:单件")
    private String traceAccuracy;

    /**
     * 排序原则,"1",'生产日期',"2",'生产批次'
     */
    private String orderRule;

    /**
     * 排序精度,"1",'日',"2",'时',"3",'分',"4",'秒'
     */
    private String orderAccuracy;

    /**
     * 质检规则编码
     */
    @ApiModelProperty(value = "质检规则编码")
    private String ruleCode;

    /**
     * 标箱数量
     */
    @ApiModelProperty(value = "标箱数量")
    private Double boxCounts;

    /**
     * 标箱毛重
     */
    @ApiModelProperty(value = "标箱毛重")
    private Double boxWeight;

    /**
     * 单件毛重
     */
    @ApiModelProperty(value = "单件毛重")
    private Double itemWeight;

    /**
     * 高储值
     */
    @ApiModelProperty(value = "高储值")
    private Double maxValue;

    /**
     * 低储值
     */
    @ApiModelProperty(value = "低储值")
    private Double lowValue;

    /**
     * 高储警戒
     */
    @ApiModelProperty(value = "高储警戒")
    private Double maxWarn;

    /**
     * 低储警戒
     */
    @ApiModelProperty(value = "低储警戒")
    private Double lowWarn;

    /**
     * 保质期(天)
     */
    @ApiModelProperty(value = "保质期(天)")
    private Integer period;

    /**
     * 默认质量状态
     */
    @ApiModelProperty(value = "默认质量状态")
    private String qualityStatus;

    /**
     * 厂内标签模板编码
     */
    @ApiModelProperty(value = "厂内标签模板编码")
    private String templateName;

    /**
     * 生产周期(天)
     */
    @ApiModelProperty(value = "生产周期(天)")
    private Double productPeriod;

    /**
     * 可采购数量/单
     */
    @ApiModelProperty(value = "可采购数量/单")
    private Double canBuy;

    /**
     * 日可接受数量
     */
    @ApiModelProperty(value = "日可接受数量")
    private Double canReceive;

    /**
     * 核算方式
     */
    @ApiModelProperty(value = "核算方式")
    private String accountWay;

    /**
     * 合格率
     */
    @ApiModelProperty(value = "合格率")
    private Double passRate;

    /**
     * 原始内部图号
     */
    @ApiModelProperty(value = "原始内部图号")
    private String originalDrawingNo;

    /**
     * 版本号
     */
    @ApiModelProperty(value = "版本号")
    private String version;

    /**
     * 图纸日期
     */
    @ApiModelProperty(value = "图纸日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private LocalDate drawingDate;

    /**
     * 是否BOM1否、2是
     */
    @ApiModelProperty(value = "是否BOM1否、2是")
    private Boolean quotaFlag;

    /**
     * 数据来源
     */
    @ApiModelProperty(value = "数据来源")
    private String dataSource;

    /**
     * 产品状态
     */
    @ApiModelProperty(value = "产品状态")
    private String productStatus;

    /**
     * 设备节拍(秒)
     */
    @ApiModelProperty(value = "设备节拍(秒)")
    private Double equipmentBeat;

    /**
     * 使用寿命
     */
    @ApiModelProperty(value = "使用寿命")
    private Integer serviceLife;

    /**
     * 使用寿命计量单位
     */
    @ApiModelProperty(value = "使用寿命计量单位")
    private String serviceLifeUnit;

    /**
     * 适用产品（生产设备和检验设备用）
     */
    @ApiModelProperty(value = "适用产品（生产设备和检验设备用）")
    private String applyProductId;

    /**
     * 容量
     */
    @ApiModelProperty(value = "容量")
    private Double equipmentCapacity;

    /**
     * 出入库单位,托pallet:2/箱box:1
     */
    @ApiModelProperty(value = "出入库单位,托pallet:2/箱box:1")
    private String inOutUnit;

    /**
     * 价格
     */
    @ApiModelProperty(value = "价格")
    private String price;

    /**
     * 日产能
     */
    @ApiModelProperty(value = "日产能")
    private BigDecimal dayProductCapacity;

    /**
     * 生产过程流程图验证结果,默认0:未通过,1通过
     */
    @ApiModelProperty(value = "生产过程流程图验证结果,默认0:未通过,1通过")
    private Integer productFlowValidate;

    /**
     * 备件品牌
     */
    @ApiModelProperty(value = "备件品牌")
    private String spareBrand;

    /**
     * 备件ABC分类
     */
    @ApiModelProperty(value = "备件ABC分类")
    private String spareAbcType;

    /**
     * 备件视图
     */
    @ApiModelProperty(value = "备件视图")
    private String spareDrawing;

    /**
     * 备件备注
     */
    @ApiModelProperty(value = "备件备注")
    private String spareRemark;

    /**
     * 备件制造商
     */
    @ApiModelProperty(value = "备件制造商")
    private String spareManufacturer;

    /**
     * 备件制造商零件编码
     */
    @ApiModelProperty(value = "备件制造商零件编码")
    private String sparePartNo;

    /**
     * 备件产地
     */
    @ApiModelProperty(value = "备件产地")
    private String spareOrigin;

    /**
     * 备件条码管理
     */
    @ApiModelProperty(value = "备件条码管理")
    private String spareBarcodeManagement;

    /**
     * 备件有效期
     */
    @ApiModelProperty(value = "备件有效期")
    private String validity;

    /**
     * 是否是备件
     */
    @ApiModelProperty(value = "是否是备件")
    private Integer isSpare;

    /**
     * 备件分类id
     */
    @ApiModelProperty(value = "备件分类id")
    private Long spareClassId;

    /**
     * 备件描述（英）
     */
    @ApiModelProperty(value = "备件描述（英）")
    private String spareDescEn;

    /**
     * 每托箱数
     */
    @ApiModelProperty(value = "每托箱数")
    private Integer boxQuantityPerPallet;

    /**
     * 管理方式:1:数量管理,2:条码管理
     */
    @ApiModelProperty(value = "管理方式:1:数量管理,2:条码管理")
    private String managementType;

    /**
     * 结算单位:默认,weight,quantity
     */
    @ApiModelProperty(value = "结算单位:默认,weight,quantity")
    private String settlementUnit;

    /**
     * 是否通用备件 1是 2否
     */
    @ApiModelProperty(value = "是否通用备件 1是 2否")
    private Integer isUniversal;

    /**
     * 类别
     */
    @ApiModelProperty(value = "类别")
    private String category;

    /**
     * 库存初始化是否完成,0:默认,否,1:是
     */
    @ApiModelProperty(value = "库存初始化是否完成,0:默认,否,1:是")
    private Integer isInventoryInit;

    /**
     * 是否有包装方案1否，2是，默认1
     */
    @ApiModelProperty(value = "是否有包装方案1否，2是，默认1")
    private Integer isPackaging;

    /**
     * 生产方式,1:库存式,2:订单式
     */
    @ApiModelProperty(value = "生产方式,1:库存式,2:订单式")
    private Integer productionMode;

    /**
     * 是否编辑过, 0/空:已编辑,1:未编辑
     */
    @ApiModelProperty(value = "是否编辑过, 0/空:已编辑,1:未编辑")
    private Integer editFlag;

    /**
     * 最小生产批量
     */
    @ApiModelProperty(value = "最小生产批量")
    private Integer minProduct;

    /**
     * 点数
     */
    @ApiModelProperty(value = "点数")
    private Integer points;

    /**
     * 车型
     */
    @ApiModelProperty(value = "车型")
    private String carModel;

    /**
     * 客户物料号
     */
    @ApiModelProperty(value = "客户物料号")
    private String customerMaterialNo;

    /**
     * 库位
     */
    @ApiModelProperty(value = "库位")
    private Long warehouseLoc;

    /**
     * 完工入库标识
     */
    @ApiModelProperty(value = "完工入库标识")
    private String entryFlag;

    /**
     * 库区名称
     */
    @ApiModelProperty(value = "库区名称")
    private String warehouseLocName;

    /**
     * 图纸号
     */
    @ApiModelProperty(value = "图纸号")
    private String drawingCode;

    /**
     * device_type
     */
    @ApiModelProperty(value = "device_type")
    private String deviceType;

    /**
     * 自动出库(1.否 2.是)
     */
    @ApiModelProperty(value = "自动出库(1.否 2.是)")
    private String autoOutStatus;

    /**
     * 出库方式
     */
    @ApiModelProperty(value = "出库方式")
    private String autoOutType;

    /**
     * 自动入库(1.否 2.是)
     */
    @ApiModelProperty(value = "自动入库(1.否 2.是)")
    private String autoInStatus;

    /**
     * 是否免检(1.否 2.是)
     */
    @ApiModelProperty(value = "是否免检(1.否 2.是)")
    private String exemptInspect;

    /**
     * 入库库位
     */
    @ApiModelProperty(value = "入库库位")
    private String storageLocation;

    /**
     * 其他系统编码
     */
    @ApiModelProperty(value = "其他系统编码")
    private String otherSysCode;

    /**
     * 其他系统编码
     */
    @ApiModelProperty(value = "其他系统编码")
    private String otherSysCode2;

    /**
     * 物料编码kd
     */
    @ApiModelProperty(value = "物料编码kd")
    private String materialNoKd;

    /**
     * 材料
     */
    @ApiModelProperty(value = "材料")
    private String rawMaterial;

    /**
     * 尺寸及公差
     */
    @ApiModelProperty(value = "尺寸及公差")
    private String sizeAndPublicErrand;

    /**
     * 材质
     */
    @ApiModelProperty(value = "材质")
    private String material;

    /**
     * 厚度及公差
     */
    @ApiModelProperty(value = "厚度及公差")
    private String thicknessAndPublicErrand;

    /**
     * 镀膜
     */
    @ApiModelProperty(value = "镀膜")
    private String coating;

    /**
     * 圆形
     */
    @ApiModelProperty(value = "圆形")
    private String circle;

    /**
     * 平行/偏心
     */
    @ApiModelProperty(value = "平行/偏心")
    private String parallelOrOffCenter;

    /**
     * 光洁度
     */
    @ApiModelProperty(value = "光洁度")
    private String surfaceFinish;

    /**
     * 角度及角度公差
     */
    @ApiModelProperty(value = "角度及角度公差")
    private String angle;

    /**
     * 半径
     */
    @ApiModelProperty(value = "半径")
    private String radius;

    /**
     * 轴距
     */
    @ApiModelProperty(value = "轴距")
    private String wheelbase;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     * 主要仓库
     */
    @ApiModelProperty(value = "主要仓库")
    private Long mainWarehouseId;

    /**
     * 主要来源 P:采购件M:厂内生产件S:委外生产件
     */
    @ApiModelProperty(value = "主要来源 P:采购件M:厂内生产件S:委外生产件")
    private String mainSource;

    /**
     * 主要供应商
     */
    @ApiModelProperty(value = "主要供应商")
    private Long mainSupplierId;

    /**
     * 批号管理 重要，根据实际填写T/F(T:批号管理，F:非批号管理)
     */
    @ApiModelProperty(value = "批号管理 重要，根据实际填写T/F(T:批号管理，F:非批号管理)")
    private String batchNoManagement;

    /**
     * 主要仓库编码
     */
    @ApiModelProperty(value = "主要仓库编码")
    private String mainWarehouse;

    /**
     * 直径
     */
    @ApiModelProperty(value = "直径")
    private String diameter;

    /**
     * 面形
     */
    @ApiModelProperty(value = "面形")
    private String shape;

    /**
     * 主要供应商
     */
    @ApiModelProperty(value = "主要供应商")
    private String mainSupplier;

    /**
     * 瞳距
     */
    @ApiModelProperty(value = "瞳距")
    private String pupilDistance;


}
